﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WSMX_Invoice.MX.Providers
{
    /// <summary>
    /// Clase abstracta para el timbrado digital
    /// </summary>
    public abstract class Provider
    {
        public const string xmlHeader = "<?xml version=\"1.0\"?>";
        /// <summary>
        /// Llave que da el proveedor, Identificador de Cliente
        /// </summary>
        public string CustomerKey { get; set; }
        /// <summary>
        /// URL del proveedor de Servicio
        /// </summary>
        public string EndPoint { get; set; }
        /// <summary>
        /// Ruta para el certificado para Timbrar
        /// </summary>
        public string PathCertificado { get; set; }
        /// <summary>
        /// Password del certificado para Timbrar
        /// </summary>
        public string PasswordCertificado { get; set; }
        /// <summary>
        /// Codigo de Error arrojado por el proveedor
        /// </summary>
        public string Errocode {get; set;}
        /// <summary>
        /// Descripcon del Error arrojado por el proveedor
        /// </summary>
        public string Error { get; set;}

        public string getError()
        {
            return Errocode + "-" + Error;
        }

        public void setParams_Timbrado(string _CustomerKey, string _Endpoint)
        {
            CustomerKey = _CustomerKey;
            EndPoint = _Endpoint;
        }

        public void setParams_Validadion()
        {

        }

        public void setParams_Cancelacion()
        {

        }


        /// <summary>
        /// Clase para timbrar un comprobante
        /// </summary>
        /// <param name="_rutaComprobante">Ruta fisica del Comprobante</param>
        /// <returns>True si se pudo timbrar correctamente</returns>
        public abstract Boolean Timbra (string _rutaComprobante);

        /// <summary>
        /// Clase para validar un comprobante Fiscal
        /// </summary>
        /// <param name="_rutaComprobante">Ruta fisica del Comprobante</param>
        /// <returns>True si se pudo validar correctamente</returns>
        public abstract Boolean Valida  (string _rutaComprobante);

        /// <summary>
        /// Clase para cancelar un comprobante Fiscal
        /// </summary>
        /// <param name="_rutaComprobante">Ruta Comprobante</param>
        /// <returns>True si se pudo Cancelar el comprobante</returns>
        public abstract Boolean Cancela(string _rutaComprobante);

    }
}
